﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using PatentApp.Data;
using PatentApp.Models;

namespace PatentApp
{
    public partial class dlgLogOn : Form
    {
        int _try = 3;
        dlgMain mainWin;
        Access loggedUser;

        public dlgLogOn()
        {
            InitializeComponent();
            pnlChangePass.Visible = false;
            pnlLoginForm.Visible = true;
            //using (var session = NHibernateCfg.OpenSession())
            //{
            //    using (var transaction = session.BeginTransaction())
            //    {
            //        var usr = new Access
            //        {
            //            Login = "user",
            //            Haslo = "password",
            //            Pracownik = new Pracownik { Imie = "Pracownik", Nazwisko = "Obsługi", Tytul = "", Wydzial = "" }
            //        };
            //        var prod = new Produkt
            //        {
            //            DataOgloPat = DateTime.Now.AddDays(4),
            //            DataOgloZglo = DateTime.Now.AddDays(5),
            //            DataZgloszenia = DateTime.Now.AddDays(6),
            //            DataZglTworcy = DateTime.Now.AddDays(6),
            //            Kategoria = new Kategoria
            //            {
            //                Nazwa = "Ogolna"
            //            },
            //            NrOgolny = 1,
            //            NrPatentu = "JEDEN",
            //            NrRoczny = 2,
            //            Platnosc = true,
            //            NrZgloszenia = "DWA",
            //            Tytul = "Jakis Tytuł",
            //            SlowoKluczowe = "Patent",
            //            WlascicielPraw = "Testowy",
            //        };
            //        usr.Pracownik.Produkty.Add(prod);

            //        session.SaveOrUpdate(usr);

            //        transaction.Commit();
            //        Console.WriteLine("Created Access: " + usr.Login);
            //        Console.WriteLine("Created Pracownik: " + usr.Pracownik.Imie + " " + usr.Pracownik.Nazwisko);
            //    }
            //}
        }

        private void btEtykiety_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.No;
            this.Close();
        }

        private void btnBack_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnLogin_Click(object sender, EventArgs e)
        {
            if (txtLogin.Text.Length == 0 || txtPassword.Text.Length == 0)
            {
                MessageBox.Show("Uzupełnij wymagane pola.");
                return;
            }
            if (_try > 0)
            {
                loggedUser = null;
                using (var session = NHibernateCfg.OpenSession())
	            {
                    loggedUser = (from user in session.QueryOver<Access>() where user.Login == txtLogin.Text && user.Haslo == txtPassword.Text select user).SingleOrDefault<Access>();
                    if(loggedUser!=null)
                        Console.WriteLine("Read Access for Employee: " + loggedUser.Pracownik.Imie + " " + loggedUser.Pracownik.Nazwisko);	                 
	            }
                if (loggedUser != null)//Logowanie
                {
                    this.Hide();
                    if (mainWin == null)
                        mainWin = new dlgMain(loggedUser);
                    DialogResult res = mainWin.ShowDialog() ;
                    if (res == DialogResult.OK)
                        this.Show();
                    else if (res == DialogResult.Abort)
                        this.Close();
                    else
                        this.Close();
                }
                else
                {
                    MessageBox.Show("Wpisałeś niepoprawe dane");
                    _try--;
                }
            }
            if (_try == 0)
            {
                MessageBox.Show("Niepoprawe dane zostały wpisane trzykrotnie.");
                this.DialogResult = DialogResult.No;
                this.Close();
            }
        }

        private void btnUser_Click(object sender, EventArgs e)
        {
            pnlChangePass.Visible = false;
            pnlLoginForm.Visible = true;
            txtLogin.Focus();
            this.AcceptButton = btnLogin;
        }

        private void btnChangePass_Click(object sender, EventArgs e)
        {
            if (txtLogin.Text.Length == 0 || txtPassword.Text.Length == 0)
            {
                MessageBox.Show("Uzupełnij wymagane pola.");
                return;
            }
            if (_try > 0)
            {
                loggedUser = null;
                using (var session = NHibernateCfg.OpenSession())
                {
                    loggedUser = (from user in session.QueryOver<Access>() where user.Login == txtLogin.Text && user.Haslo == txtPassword.Text select user).SingleOrDefault<Access>();
                    if (loggedUser != null) 
                        Console.WriteLine("Read Access for Employee: " + loggedUser.Pracownik.Imie + " " + loggedUser.Pracownik.Nazwisko);
                }
                if (loggedUser != null)//Logowanie
                {
                    pnlChangePass.Visible = true;
                    pnlLoginForm.Visible = false;
                    txtLogChange.Text = txtLogin.Text;
                }
                else
                {
                    MessageBox.Show("Wpisałeś niepoprawe dane");
                    _try--;
                }
            }
            if (_try == 0)
            {
                MessageBox.Show("Niepoprawe dane zostały wpisane trzykrotnie.");
                this.DialogResult = DialogResult.No;
                this.Close();
            }
        }

        private void btnChangeOk_Click(object sender, EventArgs e)
        {
            bool update = false;
            if (loggedUser == null)
                return;
            //Zmiana loginu
            if (txtLogChange.Text.Length != 0 && txtLogChangeNew.Text.Length != 0) {
                update = true;
                if(txtLogChange.Text!=loggedUser.Login)
                    MessageBox.Show("Niepoprawna nazwa użytkownika.");
                else if (txtLogChange.Text == txtLogChangeNew.Text)
                    MessageBox.Show("Loginy są takie same.");
                else {
                    loggedUser.Login = txtLogChangeNew.Text;
                    MessageBox.Show("Zmiana loginu zakończona pomyślnie.");
                }
            }
            //zmina hasla
            if (txtHaslo.Text.Length != 0 && txtHasloNowe.Text.Length != 0 && txtHasloRepeat.Text.Length != 0)
            {
                update = true;
                if (txtHaslo.Text != loggedUser.Haslo)
                    MessageBox.Show("Niepoprawne hasło.");
                else if (txtHaslo.Text == txtHasloNowe.Text)
                    MessageBox.Show("Hasło nie uległo zmianie.");
                else if (txtHasloNowe.Text != txtHasloRepeat.Text)
                    MessageBox.Show("Nowe hasło i powtórzenie są różne.");
                else
                {
                    loggedUser.Haslo = txtHasloNowe.Text;
                    MessageBox.Show("Zmiana hasła zakończona pomyślnie.");
                }
            }
            if(update)
                using (var session = NHibernateCfg.OpenSession())
                {
                    using (var transaction = session.BeginTransaction())
                    {

                        session.Update(loggedUser);
                        transaction.Commit();
                        Console.WriteLine("Updated Access: " + loggedUser.Login);
                    }
                }
            pnlChangePass.Visible = false;
            pnlLoginForm.Visible = true;
            loggedUser = null;
            clearChangePassForm();
        }

        private void clearChangePassForm()
        {
            txtHaslo.Text = txtHasloNowe.Text = txtHasloRepeat.Text = txtLogChangeNew.Text = "";
        }

        private void btnChangeCancel_Click(object sender, EventArgs e)
        {
            pnlChangePass.Visible = false;
            pnlLoginForm.Visible = true;
        }

        private void btnPokaz1_Click(object sender, EventArgs e)
        {
            txtHaslo.UseSystemPasswordChar = !txtHaslo.UseSystemPasswordChar;
        }

        private void btnPokaz2_Click(object sender, EventArgs e)
        {
            txtHasloNowe.UseSystemPasswordChar = !txtHasloNowe.UseSystemPasswordChar;
        }

        private void button3_Click(object sender, EventArgs e)
        {
            txtHasloRepeat.UseSystemPasswordChar = !txtHasloRepeat.UseSystemPasswordChar;
        }
    }
}
